home *** CD-ROM | disk | FTP | other *** search
/ Power CD / Power CD ATARI-Rechner Lieben.iso / DEMOS / HM2_DEMO / BSP / MILLER.M < prev    next >
Encoding:
Text File  |  1993-01-04  |  2.4 KB  |  118 lines

  1. MODULE Miller;
  2. (* $!f+ :  (* bei aktivierter Option f FPU-Modul verwenden *)
  3. FROM FPU IMPORT SIN, COS, EXTEND, WHOLE;
  4. *)
  5. FROM MathLib0 IMPORT Sin, Cos;
  6. IMPORT appl, graf, MathLib0, VDI, v, vsl, SysVar, Terminal;
  7.  
  8. FROM SYSTEM IMPORT CODE;
  9.  
  10. CONST
  11. (* cStep legt fest, wieviele Punkte berechnet werden,
  12.      und damit auch, wie lange es dauert *)
  13. (*     cStep = 0.1; (* schnell, aber ziemlich eckig *) *)
  14.     cStep = 0.03;
  15. (*     cStep = 0.01; *)
  16. (*     cStep = 0.005; *)
  17. (*     cStep = 0.0025; *)
  18.     N = TRUNC (200.0 * MathLib0.pi / cStep + 0.5);
  19.  
  20. VAR
  21.     hdl,
  22.     ScrW, ScrH: SHORTINT;
  23.  
  24. PROCEDURE init(): BOOLEAN;
  25. TYPE
  26.     tIn = ARRAY [0..10] OF SHORTINT;
  27. VAR
  28.     in: tIn;
  29.     out: ARRAY [0..56] OF SHORTINT;
  30.     j, w, h: SHORTINT;
  31. BEGIN
  32.     IF appl.init () < 0 THEN RETURN FALSE END;
  33.     (*VDI init*)
  34.     in := tIn{1 BY 10, 2};
  35.     hdl := graf.handle (j, j, j, j);
  36.     v.opnvwk (in, hdl, out);
  37.     IF hdl > 0 THEN
  38.         ScrW := out[0]+1;
  39.         ScrH := out[1]+1;
  40.         RETURN TRUE
  41.     ELSE
  42.         appl.exit;
  43.         RETURN FALSE
  44.     END;
  45. END init;
  46.  
  47. CONST
  48.     cPoints = 100;
  49. TYPE
  50.     tPoints = ARRAY [0..cPoints-1] OF VDI.tPoint;
  51.  
  52. PROCEDURE Main;
  53. VAR
  54.     (*$Reg*) w2, (*$Reg*) h2: LONGINT;
  55. (*$Q+*)
  56.     (*$Reg*) a,
  57.     (*$Reg*) b,
  58.     (*$Reg*) t: LONGREAL;
  59. (*$Q=*)
  60.     (*$R+*)i: LONGINT;
  61.     (*$Reg*) j: SHORTINT;
  62.     (*$R+*)T: LONGCARD;
  63.     msg: ARRAY [0..79] OF CHAR;
  64.     Points: tPoints;
  65. BEGIN
  66.     IF init() THEN
  67.         graf.mouseform (graf.Off);
  68.         v.clrwk (hdl);
  69.         w2 := ScrW DIV 2;
  70.         h2 := ScrH DIV 2;
  71. (* $!f- :
  72.         a := FLOAT (w2) / 2.0;
  73.         b := FLOAT (h2) / 1.3;
  74. *)
  75. (* $!f+ :
  76.         a := EXTEND (w2) / 2.0;
  77.         b := EXTEND (h2) / 1.3;
  78. *)
  79.         t := 0.0;
  80.         VOID (vsl.color (hdl, VDI.Black));
  81.         T := SysVar.T200Hz ();
  82.         j := 0;
  83.         FOR i := 0 TO N DO
  84.             INC (t, cStep);
  85.             Points[j] := VDI.tPoint{
  86. (* $!f- :
  87.                                     w2 + INT (a * (Sin (0.99 * t) - 0.7 * Cos (3.01 * t))),
  88.                                     h2 + INT (b * (Cos (1.01 * t) + 0.1 * Sin (15.03 * t)))
  89. *)
  90. (* $!f+ :
  91.                                     w2 + WHOLE (a * (SIN (0.99 * t) - 0.7 * COS (3.01 * t))),
  92.                                     h2 + WHOLE (b * (COS (1.01 * t) + 0.1 * SIN (15.03 * t)))
  93. *)
  94.                                 };
  95.             INC (j);
  96.             IF j = cPoints THEN
  97.                 v.pline (hdl, cPoints, Points);
  98.                 Points[0] := Points[cPoints-1];
  99.                 j := 1
  100.             END
  101.         END;
  102.         IF j > 1 THEN
  103.             v.pline (hdl, j, Points);
  104.         END;
  105.         T := SysVar.T200Hz() - T;
  106.         msg := FORM (33C+'H', N, ' Durchläufe -> ', T DIV 200, ' sec; ',
  107.                                  N*200 DIV T, ' Durchläufe/sec'+15C+12C);
  108.         Terminal.WriteString (msg); Terminal.Read (msg[0]);
  109.         graf.mouseform (graf.On);
  110.         v.clsvwk (hdl);
  111.         appl.exit ()
  112.     END;
  113. END Main;
  114.  
  115. BEGIN
  116.     Main
  117. END Miller.
  118.         
  119.     
  120.